package com.basic.system.controller;

import com.basic.common.result.WebResult;
import com.basic.system.controller.req.AddSysDeptDto;
import com.basic.system.controller.req.DeleteByIdsDto;
import com.basic.system.controller.req.UpdateSysDeptDto;
import com.basic.system.dao.model.SysDept;
import com.basic.system.service.SysDeptService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

@RestController
@RequestMapping("/sysDept")
@Api(tags = "部门信息测试")
public class SysDeptController {
    @Resource
    private SysDeptService sysDeptService;

    /***
     * 添加部门信息
     * @param addSysDeptDto 添加类
     * @return WebResult
     */
    @ApiOperation("添加部门信息")
    @PostMapping("/addSysDept")
    public WebResult addSysDept(@RequestBody AddSysDeptDto addSysDeptDto) {
        return sysDeptService.addSysDept(addSysDeptDto);
    }

    /**
     * 批量删除
     * @param listIds 部门id集合
     * @return WebResult
     */
    @ApiOperation("批量删除(假删)")
    @DeleteMapping("/delete")
    public WebResult delete(@RequestBody DeleteByIdsDto listIds) {
        return sysDeptService.delete(listIds.getIds());
    }

    /**
     * 根据部门id删除
     * @param deptId 主键id
     * @return WebResult
     */
    @ApiOperation("根据部门id删除")
    @DeleteMapping("/markDeleted/{deptId}")
    public WebResult markDeleted(@PathVariable Long deptId) {
        return sysDeptService.markDeleted(deptId);
    }


    /***
     * 修改部门信息
     * @param updateSysDeptDto 修改参数
     * @return WebResult
     */
    @PostMapping("/updateSysDept")
    @ApiOperation("修改部门信息测试")
    public WebResult updateSysDept(@RequestBody UpdateSysDeptDto updateSysDeptDto) {
        return sysDeptService.updateSysDept(updateSysDeptDto);
    }

    /***
     * 查询所有
     */
    @PostMapping("/selectAll")
    @ApiOperation("查询所有相关数据")
    public WebResult selectAll(@RequestBody SysDept sysDept) {
        return WebResult.success(sysDeptService.selectAll(sysDept));
    }

    /**
     * 根据id查询
     * @param deptId 部门id
     * @return WebResult
     */
    @ApiOperation("查询单个数据")
    @GetMapping("/selectByPrimaryKey/{deptId}")
    public WebResult selectByPrimaryKey(@PathVariable Long deptId) {
        return sysDeptService.selectByPrimaryKey(deptId);
    }

    /**
     * 模糊查询
     * @param sysDept 部门
     * @return WebResult
     */
    @ApiOperation("模糊查询")
    @PostMapping("/selectByDeptName")
    public WebResult selectByDeptName(@RequestBody SysDept sysDept) {
        return sysDeptService.selectByDeptName(sysDept);
    }

    /**
     * 通过父id查询
     * @param sysDept 部门
     * @return WebResult
     */
    @PostMapping("/selectAllParam")
    public WebResult selectAllParam(@RequestBody SysDept sysDept) {
        return sysDeptService.selectAllByParam(sysDept);
    }

    /**
     * 通过部门id查询所有同级以及子级数据
     * @param sysDept 部门
     * @return WebResult
     */
    @PostMapping("/selByDept")
    public WebResult selByDept(@RequestBody SysDept sysDept) {
        return WebResult.success(sysDeptService.selByDept(sysDept));
    }

    /**
     * 根据deptid查询下方所有的数据
     * @param sysDept 实体类
     * @return WebResult
     */
    @PostMapping("/selSysDeptSubdata")
    public WebResult selSysDeptSubdata(@RequestBody SysDept sysDept) {
        return WebResult.success(sysDeptService.selSysDeptSubdata(sysDept));
    }

    /**
     * 只查询下级数据-仅一层
     * @param sysDept 实体类
     * @return WebResult
     */
    @PostMapping("/selSDsubordinate")
    public WebResult selSDsubordinate(@RequestBody SysDept sysDept) {
        return WebResult.success(sysDeptService.selSDsubordinate(sysDept));
    }

    /***
     * 查询所有
     */
    @PostMapping("/selectAllRes")
    @ApiOperation("查询所有相关数据")
    public WebResult selectAllRes(@RequestBody SysDept sysDept) {
        return WebResult.success(sysDeptService.selectAllRes(sysDept));
    }
}


